export default {
  // 商品数组
  cartList (state) {
    return state.cartGoodsList
  },

  // 商品总共数量
  goodsCountNum (state, getters) {
    return getters.cartList.reduce((prev, t) => prev + t.count, 0)
  },

  // 商品选中的数量
  goodsCheckedNum (state, getters) {
    return getters.cartList.filter(t => t.done).reduce((prev, t) => prev + t.count, 0)
  },

  // 控制全选按钮的状态
  checkAllBtnState (state, getters) {
    // 我的思路:
    // 排除第一次进入购物车, 没有商品的情况下购物车全选按钮也会被选中的情况
    // 如果商品初始数量为0, 那么listlength就得返回一个false
    const listLength = getters.cartList.length
    // 只有在listlength值为真的情况下, 我们再来进行比较
    // return !!listLength && getters.cartList.filter(t => t.done).length === listLength

    // 第二种思路
    // return !!listLength && getters.cartList.every(t => t.done)

    // 第三种思路, 只要找到一个done不为true的元素, some就会返回true, 再将这个true取反就可以了
    return !!listLength && !getters.cartList.some(t => !t.done)
  },

  // 计算价格
  countGoodsPrice (state, getters) {
    // 返回总价: 先过滤, 再计算,最后再保留两位小数
    return getters.cartList.filter(t => t.done).reduce((prev, t) => prev + t.count * t.price, 0).toFixed(2)
  }
}
